#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
重置所有用户的打卡状态脚本
将所有用户的 is_checkin 字段重置为 False
"""

import asyncio
import os
import sys
from pathlib import Path

# 添加项目根目录到 Python 路径
project_root = Path(__file__).parent
sys.path.insert(0, str(project_root))

from tortoise import Tortoise
from src.models.user import User
from src.config import get_settings


async def reset_all_checkin_status():
    """
    重置所有用户的打卡状态为 False
    """
    try:
        # 获取配置
        config = get_settings()
        
        # 初始化数据库连接
        await Tortoise.init(
            db_url=f"mysql://{config.MYSQL_USER}:{config.MYSQL_PASS}@{config.MYSQL_HOST}:{config.MYSQL_PORT}/{config.MYSQL_DB}",
            modules={'models': ['src.models']}
        )
        
        print("数据库连接成功")
        
        # 查询所有用户
        all_users = await User.all()
        total_users = len(all_users)
        print(f"找到 {total_users} 个用户")
        
        # 统计需要重置的用户数量
        users_to_reset = [user for user in all_users if user.is_checkin]
        reset_count = len(users_to_reset)
        print(f"需要重置打卡状态的用户数量: {reset_count}")
        
        if reset_count == 0:
            print("所有用户的打卡状态已经是 False，无需重置")
            return
        
        # 批量更新所有用户的 is_checkin 状态为 False
        await User.all().update(is_checkin=False)
        
        print(f"成功重置 {reset_count} 个用户的打卡状态")
        
        # 验证重置结果
        verification_users = await User.filter(is_checkin=True).count()
        if verification_users == 0:
            print("✅ 验证成功：所有用户的 isCheckin 字段已重置为 False")
        else:
            print(f"❌ 验证失败：仍有 {verification_users} 个用户的 isCheckin 为 True")
            
    except Exception as e:
        print(f"重置打卡状态时发生错误: {e}")
        raise
    finally:
        # 关闭数据库连接
        await Tortoise.close_connections()
        print("数据库连接已关闭")


if __name__ == "__main__":
    print("开始重置所有用户的打卡状态...")
    asyncio.run(reset_all_checkin_status())
    print("重置操作完成")